/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"B00D7BF0-1BC9-4C8B-AF4B-C1D64696F4B8",variableType:4}
 */
var fImportacion = null;

/**
 *@param {String} tipo
 *
 * @properties={typeid:24,uuid:"937B9EDF-204C-4305-9EB0-E06C6AFD73C7"}
 */
function salvar_datos(tipo)
{
	// validar los obligatorios
	if (!proveedor_id)
	{
	   globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar el proveedor','OK')
	   return false
	}
	if (!letra)
	{
	   globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar la letra del comprobante','OK')
	   return false
	}
	if (!sucursal)
	{
	   globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar la sucursal del comprobante','OK')
	   return false
	}
	if (!cod_mov)
	{
	   globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar el código de comprobante','OK')
	   return false
	}
	if (!nro_factura)
	{
	   globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar el número de comprobante','OK')
	   return false
	}
	if (!fecha_mov)
	{
	   globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar la fecha del movimiento','OK')
	   return false
	}
	if (!fecha_vto)
	{
	   globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar la fecha de vencimiento','OK')
	   return false
	}
	if (!importe)
	{
	   globals.DIALOGS.showWarningDialog('Aviso','Debe ingrese el importe','OK')
	   return false
	}
	if (!neto && !neto_no_gravado && !fImportacion)
	{
	   globals.DIALOGS.showWarningDialog('Aviso','Debe ingrese el neto y el neto no gravado','OK')
	   return false
	}
	if (globals.zparam_usa_proyecto == 1 && proyecto_id == null)
	{
	   globals.DIALOGS.showWarningDialog('Aviso','Debe ingrese el proyecto','OK')
	   return false
	}
	
	if (tipo != 'modificacion')
	{
		var valida = ver_duplicado();
		if (valida == false)
			return false;
	}
	// comprueba importes ingresados
	var importe_aux = neto + iva
	importe_aux += neto_2
	importe_aux += neto_3
	importe_aux += iva_2
	importe_aux += iva_3
	importe_aux += iva_percep
	importe_aux += neto_no_gravado
	importe_aux += itc
	importe_aux += ing_brut_percep
	importe_aux += ganancias_percep
	importe_aux += forms.ctacte_pr_carga_varios_tab.fTotal

	if (Math.abs(importe - importe_aux) > 0.001 )
	{
		globals.DIALOGS.showWarningDialog('Aviso','No coincide la suma de los importes ingresados','OK')
		return false
	}
	else
	{
		//Verifico q la suma de los importes en el asiento sea igual al neto
		if (ctacte_pr_to_ctacte_pr_contable.getSize() > 0)
		{
			var $total = neto + neto_2 + neto_3 + neto_no_gravado
			if ( Math.abs(forms.ctacte_pr_carga_contable_tab.fTotal - $total) > 0.001 )
			{
				globals.DIALOGS.showWarningDialog('Aviso','No coincide el neto con el total del asiento ' + $total + ' - ' + Math.abs(forms.ctacte_pr_carga_contable_tab.fTotal),'OK')
   				return false
			}
			plancta_id_gastos = null
			plancta_id_percep_ing_brut = null
		}
		// mas datos
		saldo = importe
		if (letra == 'A' || letra == 'M')
		{
			tasa_iva_id = ctacte_pr_to_tasa_iva_porc.tasa_iva_id // guarda ambos tasa_iva y % iva;
			
			if (iva_porc_2 != null) // si no tiene valor da error en la relacion
			{
				tasa_iva_id_2 = ctacte_pr_to_tasa_iva_porc_2.tasa_iva_id
			}	
			if (iva_porc_3 != null) // si no tiene valor da error en la relacion
			{
				tasa_iva_id_3 = ctacte_pr_to_tasa_iva_porc_3.tasa_iva_id
			}
		}
		else
		{
			tasa_iva_id	= 0   
			iva			= 0
			iva_porc	= 0
			iva_percep	= 0
			iva_2		= 0
			iva_3		= 0
			iva_porc_2	= 0
			iva_porc_3	= 0
			tasa_iva_id_2 = 0
			tasa_iva_id_3 = 0
		}
		if (ctacte_pr_to_proveedor.provincia_id != null)
			provincia_id = ctacte_pr_to_proveedor.provincia_id;
		else
			provincia_id = 0
				
		if (itc == null)
			itc = 0;
		
		if (iva_percep == null)
			iva_percep = 0;
		
		// salvar ctacte
		databaseManager.startTransaction()
		var estado = databaseManager.saveData()
		if (estado == true)
		{
			globals.DIALOGS.showInfoDialog('Aviso',  ctacte_pr_to_tab_mov_pr.descripcion + ' ' + letra + '-' + utils.numberFormat(sucursal,'0000') + '-' + utils.numberFormat(nro_factura,'00000000') + '  Cargada',  "OK")
			databaseManager.commitTransaction()
			Iniciar()
			return true
		}
		else
		{
			globals.DIALOGS.showWarningDialog('Aviso', 'Comprobante No fue registrado ',  "OK")
			databaseManager.rollbackTransaction()
			cancelar()
			return false
		}
	}
}

/**
 *
 * @properties={typeid:24,uuid:"F19D46BE-222F-4004-BC88-DC715555B243"}
 */
function cancelar() 
{
	databaseManager.revertEditedRecords()
	Iniciar()
}

/**
 *
 * @properties={typeid:24,uuid:"004B7566-860B-476E-AA59-C9D440EFC61A"}
 */
function Iniciar() 
{
	databaseManager.setAutoSave(false)	
	controller.newRecord()
	cod_mov				= 1
	tasa_iva_id 		= 0   
	iva					= 0
	iva_2				= 0
	iva_3				= 0
	iva_porc_2			= 0
	iva_porc_3			= 0
	tasa_iva_id_2 		= 0
	tasa_iva_id_3 		= 0
	iva_porc			= 21
	iva_percep			= 0
	neto				= 0
	neto_2				= 0
	neto_3				= 0
	neto_no_gravado		= 0
	ing_brut_percep		= 0
	ganancias_percep	= 0
	importe				= 0
	fImportacion		= 0
	elements.iva_2.enabled 		= false
	elements.iva_3.enabled 		= false
	elements.iva_porc_2.enabled = false
	elements.iva_porc_3.enabled = false
	forms.ctacte_pr_carga_contable_tab.fTotal 	= 0
	forms.ctacte_pr_carga_varios_tab.fTotal 	= 0
	centro_id = 1
	cod_area  = 1
}

/**
 * Handle changed data.
 *
 * @param {Object} oldValue old value
 * @param {Object} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean} valid value
 *
 * @properties={typeid:24,uuid:"365DF1C9-36D7-44E2-8B27-E90CF8EFB6E3"}
 */
function onDataChange_letra(oldValue, newValue, event) 
{
	if (letra == 'A' || letra == 'M') 
	{
		elements.grp_iva.enabled 		= true
		elements.iva_2.enabled 			= (neto_2 != null && neto_2 != 0)
		elements.iva_3.enabled			= (neto_3 != null && neto_3 != 0)
		elements.iva_porc_2.enabled		= (neto_2 != null && neto_2 != 0)
		elements.iva_porc_3.enabled		= (neto_3 != null && neto_3 != 0)
	}
	else
	{
		neto		= 0
		neto_2		= 0
		neto_3		= 0
		iva			= 0
		iva_porc	= 0
		tasa_iva_id	= 0
		iva_2		= 0
		iva_3		= 0
		iva_porc_2	= 0
		iva_porc_3	= 0
		tasa_iva_id_2 = 0
		tasa_iva_id_3 = 0
		calcular_importe()
		elements.grp_iva.enabled = false
	}
	return true
}

/**
 * Handle changed data.
 *
 * @param {Object} [oldValue] old value
 * @param {Object} [newValue] new value
 * @param {JSEvent} [event] the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"E52FB538-633B-40EA-A8E5-9B4388FB20EA"}
 */
function calcular_iva(oldValue, newValue, event) 
{
	if (letra == 'A' || letra == 'M') 
	{
		iva_porc 	= ctacte_pr_to_tasa_iva_porc.tasa_iva_porc
		tasa_iva_id = ctacte_pr_to_tasa_iva_porc.tasa_iva_id // guarda ambos tasa_iva y % iva;
		iva 		= ((neto * iva_porc) / 100).toFixed(2) * 1 
		if (iva_porc_2 != null) // si no tiene valor da error en la relacion
		{
			iva_porc_2		= ctacte_pr_to_tasa_iva_porc_2.tasa_iva_porc
			tasa_iva_id_2	= ctacte_pr_to_tasa_iva_porc_2.tasa_iva_id
			iva_2 			= ((neto_2 * iva_porc_2) / 100).toFixed(2) * 1 
		}	
		if (iva_porc_3 != null) // si no tiene valor da error en la relacion
		{
			iva_porc_3		= ctacte_pr_to_tasa_iva_porc_3.tasa_iva_porc
			tasa_iva_id_3	= ctacte_pr_to_tasa_iva_porc_3.tasa_iva_id
			iva_3			= ((neto_3 * iva_porc_3) / 100).toFixed(2) * 1 
		}
	}
	else 
	{
		iva			= 0
		iva_porc	= 0
		tasa_iva_id	= 0
		iva_2		= 0
		iva_3		= 0
		iva_porc_2	= 0
		iva_porc_3	= 0
		tasa_iva_id_2 = 0
		tasa_iva_id_3 = 0
	}
	return true
}

/**
 * @properties={typeid:24,uuid:"FC2C4AA2-1137-4925-8271-FCF080C6ECE4"}
 */
function calcular_importe() 
{
	importe = neto + neto_2 + neto_3 + iva + iva_2 + iva_3 + iva_percep + neto_no_gravado + itc + ing_brut_percep + ganancias_percep
	importe = globals.redondeo(importe)
}

/**
 * Handle changed data.
 *
 * @param {Object} oldValue old value
 * @param {Object} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"7A357EBD-AB48-4A02-9053-EEBF4BCCDB8B"}
 */
function onDataChange_calc_iva(oldValue, newValue, event) 
{
	elements.iva_2.enabled 			= (neto_2 != null && neto_2 != 0)
	elements.iva_3.enabled			= (neto_3 != null && neto_3 != 0)
	elements.iva_porc_2.enabled		= (neto_2 != null && neto_2 != 0)
	elements.iva_porc_3.enabled		= (neto_3 != null && neto_3 != 0)
	calcular_iva();
	calcular_importe();
	return true;
}

/**
 * @properties={typeid:24,uuid:"94BF338E-A84E-4527-917C-14E6DEDA6F59"}
 * @AllowToRunInFind
 */
function ver_duplicado()    
{
	// event.getElementName()  event.DATACHANGE
	if (sucursal==null || letra==null || cod_mov==null || nro_factura==null || proveedor_id==null)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Falta ingresar datos del comprobante para verificar si ya existe en cuenta corriente ','OK')
		return false;
	}

	var $sql = 'SELECT nro_factura FROM ctacte_pr '+
				'WHERE sucursal = ? AND letra = ? AND cod_mov = ? AND nro_factura = ? AND '+
				'proveedor_id = ? AND userv_id = ?'
	var $args = [sucursal, letra, cod_mov, nro_factura, proveedor_id, globals.gUservID]
	var $ds = databaseManager.getDataSetByQuery('infocom',$sql,$args,-1)
	if ($ds.getMaxRowIndex() > 0)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Ya hay registro/s en ctacte de proveedores con los datos del comprobante','OK')
		return false;
	}
	return true
}

/**
 * Handle changed data.
 *
 * @param {Object} oldValue old value
 * @param {Object} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"30212F6A-EA85-46B9-9140-2BB96EDB0739"}
 */
function onDataChange_proveedor(oldValue, newValue, event) 
{
	letra = null
	return true
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"81E86F6C-DD6E-4996-BB88-569BFAF248CF"}
 */
function agregarAsiento(event) {
	var $relacion = elements.tabs_490.getTabRelationNameAt(elements.tabs_490.tabIndex)
	forms.ctacte_pr_carga[$relacion].newRecord()
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"7485C997-BC96-416D-A46F-DB1543589A09"}
 */
function eliminarAsiento(event) {
	var $idx 		= elements.tabs_490.tabIndex
	var $relacion 	= elements.tabs_490.getTabRelationNameAt($idx)
	var $form 		= elements.tabs_490.getTabFormNameAt($idx)
	forms[$form].fTotal -= forms.ctacte_pr_carga[$relacion].importe
	forms.ctacte_pr_carga[$relacion].deleteRecord()
}

/**
 * Handle changed data.
 *
 * @param {Date} oldValue old value
 * @param {Date} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"1352B710-1782-4097-9C2A-A940F90D3DAC"}
 */
function onDataChangeFecha(oldValue, newValue, event) {
	if (fecha_vto && fecha_vto < newValue)
	{
		globals.DIALOGS.showWarningDialog('Aviso','La fecha de vencimiento no puede ser menor a la fecha de la factura','OK')
		return false
	}
	comparaFecha(newValue)
	fecha_presentacion = fecha_mov
	return true
}


/**
 * @param {Date} fecha
 *
 * @properties={typeid:24,uuid:"BECBD94A-3123-4DBF-9BA8-900418F513BE"}
 */
function comparaFecha(fecha)
{
	var $hoy = application.getServerTimeStamp()
	var $dias = globals.diferenciaDias($hoy,fecha)
	if ($dias > 30)
	{
		globals.DIALOGS.showInfoDialog('Aviso','La fecha está a más de 30 dias de hoy. Revise','OK')
	}
	else
	{
		if (fecha > $hoy)
		{
			globals.DIALOGS.showInfoDialog('Aviso','La fecha es mayor a la de hoy. Revise','OK')
		}
	}
}
/**
 * Handle changed data.
 *
 * @param {Date} oldValue old value
 * @param {Date} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"238590CF-BDA6-40F3-90A4-99EB64C2BCC9"}
 */
function onDataChangeFechaPresentacion(oldValue, newValue, event) {
	comparaFecha(newValue)
	return true
}

/**
 * Handle changed data.
 *
 * @param {Date} oldValue old value
 * @param {Date} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"572805F4-796A-4083-A9D6-3670B1565339"}
 */
function onDataChangeFechaVto(oldValue, newValue, event) {
	if (newValue < fecha_mov)
	{
		globals.DIALOGS.showWarningDialog('Aviso','La fecha de vencimiento no puede ser menor a la fecha de la factura','OK')
		return false
	}
	return true
}

/**
 * Handle changed data.
 *
 * @param {String} oldValue old value
 * @param {String} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"2AAD7261-265F-446D-B6D0-CBDED774D93E"}
 */
function onDataChangeIva(oldValue, newValue, event) {
	var $neto
	var $iva_porc
	if (event.getElementName() == 'iva')
	{
		$neto 		= neto
		$iva_porc 	= iva_porc
	}
	else
	{
		if (event.getElementName() == 'iva_2')
		{
			$neto 		= neto_2
			$iva_porc 	= iva_porc_2
		}
		else
		{
			$neto 		= neto_3
			$iva_porc 	= iva_porc_3
		}
	}
	var $iva = ($neto * $iva_porc) / 100
	if (oldValue != 0 && Math.abs(newValue - $iva) > 0.02)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Hay diferencia entre el cálculo automático de IVA y el IVA determinado por el usuario','OK')	
	}
	calcular_importe()
	return true
}
